// /**
// *      author: Y_Yao
// *      created: 2025-03-15 11:43:32
// **/

// #include<bits/stdc++.h>

// #define int LL
// using namespace std;
// using LL = long long;
// const LL LLINF = 9e18;
// const int INF = 0x3f3f3f3f;
// int n;
// int a[4];
// int ans;
// unordered_map<int,int> mp;

// void dfs(int cur)
// {
//     if(cur > n)
//     {
//         return;
//     }
//     if(mp[3] >= 1 && mp[5] >= 1 && mp[7] >= 1)
//     {
//         ans++;
//     }
//     for(int i = 1;i <= 3;i++)
//     {
//         mp[a[i]]++;
//         dfs(cur * 10 + a[i]);
//         mp[a[i]]--;
//     }
// }

// void solve()
// {
//     cin >> n;
//     a[1] = 3,a[2] = 5,a[3] = 7;
//     dfs(0);
//     cout << ans << endl;
// }

// signed main()
// {
//     ios::sync_with_stdio(false);
//     cin.tie(0);

//     int t = 1;
//     //cin >> t;
//     while(t--)
//     {
//         solve();
//     }
//     return 0;
// }



/**
*      author: Y_Yao
*      created: 2025-03-15 13:48:12
**/

#include<bits/stdc++.h>

#define int LL
using namespace std;
using LL = long long;
const LL LLINF = 9e18;
const int INF = 0x3f3f3f3f;
int n;
int ans;

bool check(register int x)
{
    vector<int> a(10,0);
    while(x)
    {
        int r = x % 10;
        if(r != 3 && r != 5 && r != 7) return false;
        a[r]++;
        x /= 10;
    }
    if(a[3] >= 1 && a[5] >= 1 && a[7] >= 1)
    {
        return true;
    }
    return false;
}

void solve()
{
    cin >> n;
    for(register int i = 357;i <= n;i++)
    {
        if(check(i))
        {
            ans++;
        }
    }
    cout << ans << endl;
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    int t = 1;
    //cin >> t;
    while(t--)
    {
        solve();
    }
    return 0;
}